package com.order.manager.controller.User;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.order.manager.Model.UserAddress;
import com.order.manager.Model.other.Options;
import com.order.manager.Model.other.RestBean;
import com.order.manager.service.impl.UserAddressServiceImpl;
import com.order.manager.util.JwtUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * 用户地址管理控制器
 * 处理用户收货地址的查询、新增、删除等操作
 */
@RequestMapping("/api/userAddress")
@RestController
public class UserAddressController {

    // 注入用户地址服务，用于操作地址数据
    @Resource
    UserAddressServiceImpl userAddressService;

    // 注入JWT工具类，用于解析用户身份
    @Resource
    JwtUtil jwtUtil;

    /**
     * 查询当前用户的所有收货地址
     * @param request HTTP请求对象，用于获取用户JWT
     * @return 地址列表响应
     */
    @RequestMapping("/select")
    public RestBean getAddressByUser(HttpServletRequest request) {
        // 从JWT中解析用户ID
        String uuid = jwtUtil.getJwtUsername(request);
        // 根据用户ID查询地址列表
        List<UserAddress> userAddresses = userAddressService.list(new QueryWrapper<UserAddress>()
                .eq("user_id", uuid)
        );
        // 返回地址列表
        return RestBean.success(userAddresses);
    }

    /**
     * 查询当前用户的地址选项（用于下拉选择框）
     * @param request HTTP请求对象，用于获取用户JWT
     * @return 地址选项列表响应
     */
    @RequestMapping("/select/option")
    public RestBean getAddressOptionByUser(HttpServletRequest request) {
        // 从JWT中解析用户ID
        String uuid = jwtUtil.getJwtUsername(request);
        // 根据用户ID查询地址列表
        List<UserAddress> userAddresses = userAddressService.list(new QueryWrapper<UserAddress>()
                .eq("user_id", uuid)
        );
        // 转换为下拉选项格式
        List<Options> options = new ArrayList<>();
        userAddresses.forEach(el -> {
            Options option = new Options(el.getAddress(), el.getAddressId().toString());
            options.add(option);
        });
        // 返回选项列表
        return RestBean.success(options);
    }

    /**
     * 根据地址ID删除收货地址
     * @param id 地址ID，通过路径变量传入
     * @return 删除结果响应
     */
    @RequestMapping("/del/{id}")
    public RestBean delAddressById(@PathVariable Long id) {
        // 根据ID删除地址，返回操作结果
        return userAddressService.removeById(id)
                ? RestBean.success()
                : RestBean.failure(500, "删除失败");
    }

    /**
     * 新增收货地址
     * @param request HTTP请求对象，用于获取用户JWT
     * @param address 地址内容，通过请求参数传入
     * @return 新增结果响应
     */
    @RequestMapping("/insert")
    public RestBean insert(HttpServletRequest request, String address) {
        // 创建地址实体
        UserAddress userAddress = new UserAddress();
        // 设置用户ID
        userAddress.setUserId(jwtUtil.getJwtUsername(request));
        // 设置地址内容
        userAddress.setAddress(address);
        // 保存地址，返回操作结果
        return userAddressService.save(userAddress)
                ? RestBean.success()
                : RestBean.failure(500, "新增失败");
    }
}